package cn.tedu.justone.pack02;

/**
 * @作者：JustOne
 * @时间：2021/8/22 - 11:45
 */
public class Demo03_方法示例_join插队 {
    public static void main(String[] args) {

        //线程的常用方法-示例：join(),插队
        //线程的常用方法-示例：join(),插队
        //线程的常用方法-示例：join(),插队

        //join(),插队
        // 1,当my线程执行到t.join()时，就会让出停止自己的执行，
        //   让t执行完之后自己再执行，类似于让t插队在自己前面。
        // 2,该方法也可以带参数，例如t.join(long m);
        //   即让t插队先执行m毫秒，之后就开始自由竞争时间片。

        //创建girl线程，创建you线程
        //you执行一次后，遇到了girl.join()，就会先girl执行完，自己才执行

        //创建girl线程
        Thread girl = new Thread(){
            @Override
            public void run() {
                for(int i=0;i<10;i++){
                    System.out.println("girlFriend");
                    mySleep(100);
                }
            }
        };

        //创建you线程，
        Thread you = new Thread(){
            @Override
            public void run() {
                for(int i=0;i<10;i++){
                    System.out.println("me");
                    mySleep(100);

                    //先注释，后放开，对比一下
                    try {
                        girl.join();//让girl插队，直到girl执行完
                        girl.join(300);//让girl插队300毫秒后开始自由竟争时间片
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        };

        you.start();
        girl.start();


    }

    //为了让代码更优雅，编写统一的休眠方法
    public static void mySleep(long m){
        try {
            Thread.sleep(m);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
